[アップデート] DCVプロトコルのAmazon WorkSpacesにおいてTCP/UDP 443番ポートへのフォールバック通信が可能になりました
しばたです。
今月月初の更新によりDCVプロトコルを使うAmazon WorkSpaces環境においてTCP/UDP 443番ポートを使った通信へのフォールバックが可能になりました。
AWSからのアナウンスはこちらになります。
どういうことか?
従来Amazon WorkSpaces環境ではWorkSpaceデスクトップ環境のストリーミング用に
- PCoIPプロトコルの場合 : TCP/UPD 4172番ポート
- DCV(旧WSP)プロトコルの場合 : TCP/UPD 4195番ポート
を使用します。
HTTPS(TCP/UDP 443番ポート)は認証とアプリケーションの更新のためだけに使われてきました。
今回の更新によりAmazon DCV(旧WSP)プロトコルを使う環境に対してTCP/UPD 4195番ポートへのアウトバウンド通信が塞がれている場合にTCP/UDP 443番ポートにフォールバックししてストリーミングを継続できる様になっています。
これによりHTTPS(TCP/UDP 443番ポート)さえ許可されていればWorkSpacesを利用可能となり、通信制限が厳しい環境においても導入可能になりました。
前提条件
本機能を利用するためには使用プロトコルがAmazon DCV(旧WSP)である必要があります。
PCoIPプロトコルは対象外です。
そして、WorkSpaces Clientのバージョンが以下のバージョンである必要もあります。
- Windows Client : Ver.5.23.0以降
- macOS Client : Ver.5.23.0以降
- Linux Client : Ver.2024.7以降
ただし、Proxyサーバー経由した利用は非推奨であり、TLS復号が行われる環境での利用は非サポートとなります。
WorkSpacesのストリーミング通信はWebSocketかQUICのいずれかを使うため以前からサポート状況が限定的[1]ですのでご留意ください。
確認してみた
ここからは実際に動作確認していきます。
0. 検証環境
私の検証用AWSアカウントの東京リージョンにVPCを一つ用意し、そこにAWS Managed Microsoft ADをディレクトリとしてWindows Server 2022の環境を一つ用意しました。
前提条件を満たすためにプロトコルはDCV (旧WSP)としています。
この環境に対して最新のWindows Client Ver.5.24.1から接続します。
接続元は私の自宅ですが、自宅ネットワーク環境の設定を変更しTCPおよびUDP 4195番ポートのアウトバウンド通信を意図的に遮断しておきます。
ちなみにProxyは経由させていません。
余談 : WorkSpace環境のOS/ディストリビューションについて
本記事で紹介するのはWindows Server 2022環境のみですが、本更新はWorkSpace側のOS/ディストリビューションを問いません。
DCVプロトコルさえ使っていればLinux WorkSpace環境でもフォールバック可能です。
(別途Rocky Linux環境で動作確認ずみです)
1. 接続確認
この状態でWorkSpaces Clientを起動しネットワーク疎通状況を確認すると下図の通りです。
TCP/UDP 4192による通信が遮断されているため警告が表示されています。
従来はこの状態だとストリーミング不可でしたが、本日時点で新しいバージョンのクライアントを使用していれば特に問題無く利用可能となっています。
利用ポートのフォールバックなのでラウンドトリップ時間にも特段影響はありませんでした。
2. ログファイル
クライアント側のログファイル(Windowsだと%LOCALAPPDATA%\Amazon Web Services\Amazon WorkSpaces\Logs
に存在)を確認すると、以下の通り「AWS側のエンドポイントに対してTCP/UDP 4195の接続チェックを行い失敗したのでUDP 443にフォールバック」した形跡がはっきり見て取れます。
#
# ・・・(前略)・・・
#
2024/11/30 09:45:12.646 [INF] DcvWpf.DcvConnection - Probe endpoint xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-3.prod.ap-northeast-1.highlander.aws.a2z.com:4195 - "Quic"
2024/11/30 09:45:12.646 [INF] DcvWpf.DcvConnection - Probe endpoint xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-3.prod.ap-northeast-1.highlander.aws.a2z.com:443 - "Quic"
2024/11/30 09:45:12.646 [INF] DcvWpf.DcvConnection - Probe endpoint xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-3.prod.ap-northeast-1.highlander.aws.a2z.com:4195 - "WebSocket"
2024/11/30 09:45:12.646 [INF] DcvWpf.DcvConnection - Probe endpoint xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-3.prod.ap-northeast-1.highlander.aws.a2z.com:443 - "WebSocket"
2024/11/30 09:45:12.649 [INF] DCV:quictransport - dcvquictransport initialized
2024/11/30 09:45:12.861 [INF] DCV:quictransport - Resolved hostname 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-3.prod.ap-northeast-1.highlander.aws.a2z.com:4195' to IP address: 3.114.164.8:4195
2024/11/30 09:45:12.875 [INF] DCV:quictransport - Resolved hostname 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-3.prod.ap-northeast-1.highlander.aws.a2z.com:443' to IP address: 3.114.164.8:443
2024/11/30 09:45:12.883 [INF] DCV:quictransport - Resolved hostname 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-3.prod.ap-northeast-1.highlander.aws.a2z.com:4195' to IP address: 3.114.164.8:4195
2024/11/30 09:45:12.885 [INF] DCV:quictransport - Resolved hostname 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-3.prod.ap-northeast-1.highlander.aws.a2z.com:443' to IP address: 3.114.164.8:443
2024/11/30 09:45:17.887 [INF] DcvWpf.DcvConnection - Probe result for endpoint xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-3.prod.ap-northeast-1.highlander.aws.a2z.com:4195 - "Quic" reachability: false
2024/11/30 09:45:17.887 [INF] DcvWpf.DcvConnection - Probe result for endpoint xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-3.prod.ap-northeast-1.highlander.aws.a2z.com:443 - "Quic" reachability: true
2024/11/30 09:45:17.887 [INF] DcvWpf.DcvConnection - Probe result for endpoint xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-3.prod.ap-northeast-1.highlander.aws.a2z.com:4195 - "WebSocket" reachability: false
2024/11/30 09:45:17.887 [INF] DcvWpf.DcvConnection - Probe result for endpoint xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-3.prod.ap-northeast-1.highlander.aws.a2z.com:443 - "WebSocket" reachability: true
2024/11/30 09:45:17.889 [INF] DcvWpf.Dcv - Endpoint xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-3.prod.ap-northeast-1.highlander.aws.a2z.com:443 ("Quic") is reachable
2024/11/30 09:45:17.889 [INF] DcvWpf.Dcv - Endpoint xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-3.prod.ap-northeast-1.highlander.aws.a2z.com:443 ("WebSocket") is reachable
#
# ・・・(中略)・・・
#
2024/11/30 09:45:18.657 [INF] viewer.Client - Connecting to endpoint xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-3.prod.ap-northeast-1.highlander.aws.a2z.com:443
2024/11/30 09:45:18.679 [INF] viewer.MainChannel - Connecting channel viewer.MainChannel to xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-3.prod.ap-northeast-1.highlander.aws.a2z.com:443/ws over "Quic" - attempt 1/11
#
# ・・・(後略)・・・
#
ちなみにTCPおよびUDP 4195番ポートのアウトバウンド通信が許可されている場合のログはこんな感じです。
通信制限が無いためUDP 4195をそのまま使っていることが分かります。
クリックして展開
#
# ・・・(前略)・・・
#
2024/11/30 09:34:32.578 [INF] DcvWpf.DcvConnection - Probe endpoint xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-3.prod.ap-northeast-1.highlander.aws.a2z.com:4195 - "Quic"
2024/11/30 09:34:32.579 [INF] DcvWpf.DcvConnection - Probe endpoint xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-3.prod.ap-northeast-1.highlander.aws.a2z.com:443 - "Quic"
2024/11/30 09:34:32.579 [INF] DcvWpf.DcvConnection - Probe endpoint xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-3.prod.ap-northeast-1.highlander.aws.a2z.com:4195 - "WebSocket"
2024/11/30 09:34:32.579 [INF] DcvWpf.DcvConnection - Probe endpoint xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-3.prod.ap-northeast-1.highlander.aws.a2z.com:443 - "WebSocket"
2024/11/30 09:34:32.582 [INF] DCV:quictransport - dcvquictransport initialized
2024/11/30 09:34:32.747 [INF] DCV:quictransport - Resolved hostname 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-3.prod.ap-northeast-1.highlander.aws.a2z.com:4195' to IP address: 3.114.167.42:4195
2024/11/30 09:34:32.759 [INF] DCV:quictransport - Resolved hostname 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-3.prod.ap-northeast-1.highlander.aws.a2z.com:443' to IP address: 3.114.167.42:443
2024/11/30 09:34:32.769 [INF] DCV:quictransport - Resolved hostname 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-3.prod.ap-northeast-1.highlander.aws.a2z.com:4195' to IP address: 3.114.167.42:4195
2024/11/30 09:34:32.770 [INF] DCV:quictransport - Resolved hostname 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-3.prod.ap-northeast-1.highlander.aws.a2z.com:443' to IP address: 3.114.167.42:443
2024/11/30 09:34:32.801 [INF] DcvWpf.DcvConnection - Probe result for endpoint xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-3.prod.ap-northeast-1.highlander.aws.a2z.com:4195 - "Quic" reachability: true
2024/11/30 09:34:32.801 [INF] DcvWpf.DcvConnection - Probe result for endpoint xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-3.prod.ap-northeast-1.highlander.aws.a2z.com:443 - "Quic" reachability: true
2024/11/30 09:34:32.801 [INF] DcvWpf.DcvConnection - Probe result for endpoint xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-3.prod.ap-northeast-1.highlander.aws.a2z.com:4195 - "WebSocket" reachability: true
2024/11/30 09:34:32.802 [INF] DcvWpf.DcvConnection - Probe result for endpoint xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-3.prod.ap-northeast-1.highlander.aws.a2z.com:443 - "WebSocket" reachability: true
2024/11/30 09:34:32.802 [INF] DcvWpf.Dcv - Endpoint xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-3.prod.ap-northeast-1.highlander.aws.a2z.com:4195 ("Quic") is reachable
2024/11/30 09:34:32.802 [INF] DcvWpf.Dcv - Endpoint xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-3.prod.ap-northeast-1.highlander.aws.a2z.com:443 ("Quic") is reachable
2024/11/30 09:34:32.802 [INF] DcvWpf.Dcv - Endpoint xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-3.prod.ap-northeast-1.highlander.aws.a2z.com:4195 ("WebSocket") is reachable
2024/11/30 09:34:32.802 [INF] DcvWpf.Dcv - Endpoint xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-3.prod.ap-northeast-1.highlander.aws.a2z.com:443 ("WebSocket") is reachable
#
# ・・・(中略)・・・
#
2024/11/30 09:34:33.709 [INF] viewer.Client - Connecting to endpoint xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-3.prod.ap-northeast-1.highlander.aws.a2z.com:4195
2024/11/30 09:34:33.734 [INF] viewer.MainChannel - Connecting channel viewer.MainChannel to xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-3.prod.ap-northeast-1.highlander.aws.a2z.com:4195/ws over "Quic" - attempt 1/11
#
# ・・・(後略)・・・
#
3. フォールバックの優先順位
通信を防ぐポートをそれぞれ変化させフォールバックされる優先順位を確認したところ次の優先度になっていました。
- UDP 4195 (QUIC)
- UDP 443 (QUIC)
- TCP 4195 (WebSocket)
- TCP 443 (WebSocket)
最初にQUICでの通信を試み、それが駄目ならWebSocketで通信する形になっています。
# Probeチェックの順序どおりの優先度となっていた : 下記はUPD 4195 だけブロックした際のログ
2024/11/30 11:03:44.739 [INF] DcvWpf.DcvConnection - Probe result for endpoint xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx-3.prod.ap-northeast-1.highlander.aws.a2z.com:4195 - "Quic" reachability: false
2024/11/30 11:03:44.739 [INF] DcvWpf.DcvConnection - Probe result for endpoint xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx-3.prod.ap-northeast-1.highlander.aws.a2z.com:443 - "Quic" reachability: true
2024/11/30 11:03:44.739 [INF] DcvWpf.DcvConnection - Probe result for endpoint xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx-3.prod.ap-northeast-1.highlander.aws.a2z.com:4195 - "WebSocket" reachability: true
2024/11/30 11:03:44.739 [INF] DcvWpf.DcvConnection - Probe result for endpoint xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx-3.prod.ap-northeast-1.highlander.aws.a2z.com:443 - "WebSocket" reachability: true
最後に
以上となります。
地味ですが非常に嬉しい更新ですね。
TCP/UDP 443のアウトバウンド通信を防ぐ環境は少ないでしょうし、これでAmazon WorkSpacesを使うためのネットワーク要件がかなり緩和されたと言っても過言ではないと思います。
ネットワーク制限によりAmazon WorkSpacesの導入を断念していた方は改めて検討し直しても良いかもしれません。
以前からUDPの場合はProxy経由の通信は非サポート ↩︎